package parcview.interfaces;

import java.util.List;

/**
 * Stellt den Bauabschnitt dar. Er kann frei oder belegt sein. Au�erdem erh�lt
 * er bei der Erzeugung einen Verweis auf den Parkplatz. Dazu hat er noch ein Feld, 
 * welches die Zeit enth�lt, zu dem das aktuell in ihm befindliche Auto ihn durchquert hat. 
 * Die Richtung kann ebenfalls abgefragt werden.
 */
public interface ConstructionIF {
	/**
	 * Liefert true, wenn der Bauabschnitt frei ist, sonst false.
	 * @return
	 */
	public boolean isFree();

	/**
	 * Gibt true zur�ck, wenn sich das zurzeit im Bauabschnitt befindliche Auto
	 * in Richtung des Parkplatzes bewegt. Bewegt sich das Auto in Richtung Stra�e,
	 * so wird false zur�ck gegeben.
	 * @return
	 */
	public boolean isToParkingLot();
	
	/**
	 * Gibt die Zeit zur�ck, zu der das Auto die Baustelle durchfahren hat.
	 * @return
	 */
	public long getTimeCarPassed();

	/**
	 * L�sst ein neues Auto in den Bauabschnitt fahren.
	 */
	public void letCarEntry(CarIF car, boolean toParkingLot);
	
	/**
	 * Liefert das im Bauabschnitt befindliche Auto zur�ck.
	 * @return
	 */
	public List<CarIF> getCar();

	/**
	 * Berechnet den n�chsten Schritt der Simulation. Dazu wird gepr�ft, ob
	 * sich ein Auto im Abschnitt befindet. Ist es das und der Durchfahrtzeitpunkt
	 * erreicht, so wird es je nach Richtung dem Parkplatz hinzugef�gt oder aus der
	 * Simulation entfernt.
	 */
	public void nextStep();
}
